約 5,406,606 件
https://w.atwiki.jp/ddrspwiki2nd/pages/345.html
曲名 アーティスト フォルダ 難易度 BPM NOTES/FREEZE(SHOCK) LET S GET DOWN JT PLAYAZ X3 鬼12 130 268/0 譜面 http //www.ddr.sh/steps/basic/l/lets_get/4o_lets_get_a_p.html 動画 http //www.youtube.com/watch?v=acoCVv_-mM4 (x2.0,NOTE) 解説 12/08/02 15 00より2ndMIXモードにて同曲の各難易度をそれぞれ1回でもプレーするとPRO MODEにて出現及び常駐する。 4thPLUSで差し替えられた激譜面がEXTREMEで鬼譜面として採用、それが今回も収録された。 前半は8分主体で細かい16分が混じる譜面。 後半は16分5連の地団駄が頻出。最後の8分同時2連にも注意。 足12としては若干逆詐称気味。女々しくて(激)と譜面傾向が割と近い。 11/5より通常解禁されQUICK PLAYではなく通常のPRO MODEでもプレイ可能となった -- 名無しさん (2012-11-05 23 31 29) DDR2013にて削除された模様。 -- 名無しさん (2013-11-29 04 00 17) 名前 コメント コメント(感想など) 名前 コメント
https://w.atwiki.jp/intensity/pages/29.html
//----------------------------------------------------------------------------- // $Id DecklinkCaptureDlg.cpp,v 1.9 2006/04/11 01 11 07 ivanr Exp $ // // Desc DirectShow capture sample // // Copyright (c) Blackmagic Design 2005. All rights reserved. //----------------------------------------------------------------------------- #include "stdafx.h" #include "DecklinkCapture.h" #include "DecklinkCaptureDlg.h" #include initguid.h // TODO move this to a lib #include "DecklinkSample_uuids.h" #undef lstrlenW #ifdef _DEBUG #define new DEBUG_NEW #endif #define WM_GRAPHNOTIFYWM_APP+1// for Filter Graph event notification //----------------------------------------------------------------------------- // CAboutDlg //----------------------------------------------------------------------------- // CAboutDlg dialog used for App About class CAboutDlg public CDialog { public CAboutDlg(); // Dialog Data enum { IDD = IDD_ABOUTBOX }; protected virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected DECLARE_MESSAGE_MAP() }; CAboutDlg CAboutDlg() CDialog(CAboutDlg IDD) { } void CAboutDlg DoDataExchange(CDataExchange* pDX) { CDialog DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() //----------------------------------------------------------------------------- // CDecklinkCaptureDlg dialog //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Constructor // CDecklinkCaptureDlg CDecklinkCaptureDlg(CWnd* pParent /*=NULL*/) CDialog(CDecklinkCaptureDlg IDD, pParent) , m_pIVW(NULL) { m_hIcon = AfxGetApp()- LoadIcon(IDR_MAINFRAME); } //----------------------------------------------------------------------------- // DoDataExchange // void CDecklinkCaptureDlg DoDataExchange(CDataExchange* pDX) { CDialog DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_VIDEOFORMATS, m_videoFormatCtrl); DDX_Control(pDX, IDC_COMBO_AUDIOFORMATS, m_audioFormatCtrl); DDX_Control(pDX, IDC_STATIC_PREVIEW, m_preview); DDX_Control(pDX, IDC_EDIT_CAPTUREFILE, m_captureFileCtrl); DDX_Control(pDX, IDC_COMBO_COMPRESSION, m_compressionCtrl); DDX_Control(pDX, IDC_COMBO_VIDEODEVICE, m_videoDeviceCtrl); DDX_Control(pDX, IDC_COMBO_AUDIODEVICE, m_audioDeviceCtrl); } BEGIN_MESSAGE_MAP(CDecklinkCaptureDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_CBN_SELCHANGE(IDC_COMBO_VIDEOFORMATS, OnCbnSelchangeComboVideoformats) ON_CBN_SELCHANGE(IDC_COMBO_AUDIOFORMATS, OnCbnSelchangeComboAudioformats) ON_BN_CLICKED(IDC_CHECK_AUDIOMUTE, OnBnClickedCheckAudiomute) ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnBnClickedButtonBrowse) ON_BN_CLICKED(IDC_BUTTON_CAPTURE, OnBnClickedButtonCapture) ON_BN_CLICKED(IDC_BUTTON_STOP, OnBnClickedButtonStop) ON_CBN_SELCHANGE(IDC_COMBO_COMPRESSION, OnCbnSelchangeComboCompression) ON_CBN_SELCHANGE(IDC_COMBO_VIDEODEVICE, OnCbnSelchangeComboVideodevice) ON_CBN_SELCHANGE(IDC_COMBO_AUDIODEVICE, OnCbnSelchangeComboAudiodevice) END_MESSAGE_MAP() //----------------------------------------------------------------------------- // CDecklinkCaptureDlg message handlers //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // OnInitDialog // Called before the dialog is displayed, use this message handler to initialise // our app BOOL CDecklinkCaptureDlg OnInitDialog() { CDialog OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu- AppendMenu(MF_SEPARATOR); pSysMenu- AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application s main window is not a dialog SetIcon(m_hIcon, TRUE);// Set big icon SetIcon(m_hIcon, FALSE);// Set small icon // create a basic capture graph and preview the incoming video m_pGraph = NULL; m_pVideoCapture = NULL; m_pAudioCapture = NULL; m_pVideoRenderer = NULL; m_pSmartT = NULL; m_pControl = NULL; m_pIVW = NULL; m_pMediaEvent = NULL; m_ROTRegister = 0; m_bAudioMute = FALSE; m_compressor = 0; m_bEnableCompressionCtrl = TRUE; m_captureFile = " Select File "; // initialise default video media type ZeroMemory( m_vihDefault, sizeof(m_vihDefault)); m_vihDefault.AvgTimePerFrame = 333667; m_vihDefault.bmiHeader.biWidth = 720; m_vihDefault.bmiHeader.biHeight = 486; m_vihDefault.bmiHeader.biBitCount = 16; m_vihDefault.bmiHeader.biCompression = YVYU ; // initialise default audio media type ZeroMemory( m_wfexDefault, sizeof(m_wfexDefault)); m_wfexDefault.nChannels = 2;// the only field of interest // retrieve last state QueryRegistry(); m_captureFileCtrl.SetWindowText(m_captureFile); EnableControls(); // create a preview graph // add the filters that will be used by all the graphs; preview, uncompressed capture, dv capture, // mpeg capture and windows media capture HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, reinterpret_cast void** ( m_pGraph)); if (SUCCEEDED(hr)) { #ifdef _DEBUG hr = CDSUtils AddGraphToRot(m_pGraph, m_ROTRegister); #endif hr = m_pGraph- QueryInterface(IID_IMediaControl, reinterpret_cast void** ( m_pControl)); if (SUCCEEDED(hr)) { // locate the video capture devices hr = PopulateDeviceControl( CLSID_VideoInputDeviceCategory, m_videoDeviceCtrl); if (SUCCEEDED(hr)) { hr = PopulateDeviceControl( CLSID_AudioInputDeviceCategory, m_audioDeviceCtrl); if (SUCCEEDED(hr)) { PWSTR pVideoName = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.SetCurSel(0)); PWSTR pAudioName = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.SetCurSel(0)); if (pVideoName pAudioName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_VideoInputDeviceCategory, pVideoName, m_pVideoCapture); if (SUCCEEDED(hr)) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_AudioInputDeviceCategory, pAudioName, m_pAudioCapture); if (SUCCEEDED(hr)) { PopulateVideoControl();// populate the video format control with the video formats of the currently selected device PopulateAudioControl();// populate the audio format control with the audio formats of the currently selected device PopulateCompressionControl(); // locate video screen renderer for the preview window hr = CDSUtils AddFilter(m_pGraph, CLSID_VideoRendererDefault, L"Video Renderer", m_pVideoRenderer); if (SUCCEEDED(hr)) { hr = CreatePreviewGraph(); } } } } } } } } return TRUE; // return TRUE unless you set the focus to a control } //----------------------------------------------------------------------------- // DestroyWindow // Called when the window is being destroyed, clean up and free all resources. BOOL CDecklinkCaptureDlg DestroyWindow() { m_regUtils.Close(); #ifdef _DEBUG CDSUtils RemoveGraphFromRot(m_ROTRegister); #endif DestroyGraph(); SAFE_RELEASE(m_pControl); // Hide Video Window and remove owner. This has to be done prior to // destroying any window that displays video/still. if (m_pIVW) { m_pIVW- put_Visible(OAFALSE); m_pIVW- put_Owner(NULL); } SAFE_RELEASE(m_pIVW); SAFE_RELEASE(m_pMediaEvent); SAFE_RELEASE(m_pVideoRenderer); SAFE_RELEASE(m_pAudioCapture); SAFE_RELEASE(m_pVideoCapture); SAFE_RELEASE(m_pGraph); // free mediatypes attached to format controls int count = m_videoFormatCtrl.GetCount(); for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(item)); } count = m_audioFormatCtrl.GetCount(); for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(item)); } // release the device names attached to the item s data count = m_videoDeviceCtrl.GetCount(); for (item=0; item count; ++item) { PWSTR pName = (PWSTR)m_videoDeviceCtrl.GetItemData(item); delete [] pName; } count = m_audioDeviceCtrl.GetCount(); for (item=0; item count; ++item) { PWSTR pName = (PWSTR)m_audioDeviceCtrl.GetItemData(item); delete [] pName; } return CDialog DestroyWindow(); } //----------------------------------------------------------------------------- // OnSysCommand // void CDecklinkCaptureDlg OnSysCommand(UINT nID, LPARAM lParam) { if ((nID 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog OnSysCommand(nID, lParam); } } //----------------------------------------------------------------------------- // OnPaint // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CDecklinkCaptureDlg OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast WPARAM (dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect( rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog OnPaint(); } } //----------------------------------------------------------------------------- // HandleGraphEvent // At the moment we just read the event, discard it and release memory used to store it. void CDecklinkCaptureDlg HandleGraphEvent(void) { LONG lEventCode, lEventParam1, lEventParam2; if (!m_pMediaEvent) { return; } while (SUCCEEDED(m_pMediaEvent- GetEvent( lEventCode, reinterpret_cast LONG_PTR * ( lEventParam1), reinterpret_cast LONG_PTR * ( lEventParam2), 0))) { // just free memory associated with event m_pMediaEvent- FreeEventParams(lEventCode, lEventParam1, lEventParam2); } } //----------------------------------------------------------------------------- // WindowProc // Have to add our own message handling loop to handle events from the preview video // window and to pass Window events onto it - this is so it redraws itself correctly etc. LRESULT CDecklinkCaptureDlg WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_GRAPHNOTIFY HandleGraphEvent(); break; } // Pass all msgs to video window. vid window exists as child of static // picture frame. This ensures video window redraws itself etc. if (m_pIVW) { m_pIVW- NotifyOwnerMessage(reinterpret_cast LONG_PTR (m_hWnd) /* from me */, message, wParam, lParam); } return CDialog WindowProc(message, wParam, lParam); } //----------------------------------------------------------------------------- // OnQueryDragIcon // The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CDecklinkCaptureDlg OnQueryDragIcon() { return static_cast HCURSOR (m_hIcon); } //----------------------------------------------------------------------------- // CreatePreviewGraph // Create a graph to preview the input // NOTE There are many ways of building graphs, you could opt for the ICaptureGraphBuilder interface which would // make things are lot simpler, however it doesn t always build the most efficient graphs. HRESULT CDecklinkCaptureDlg CreatePreviewGraph() { HRESULT hr = S_OK; if (m_pGraph) { // locate smart-T // NOTE The smart-T appears to hold references to its upstream connections even when its input pin // is diconnected. The smart-T has to be removed from the graph in order to clear these references which // is why the filter is enumerated and added every time the preview graph is built and removed whenever // it is destroyed. ASSERT(NULL == m_pSmartT); hr = CDSUtils AddFilter(m_pGraph, CLSID_SmartTee, L"Smart Tee", m_pSmartT); if (SUCCEEDED(hr)) { // DV preview is slightly different to all other previews if (ENC_DV != m_compressionCtrl.GetItemData(m_compressionCtrl.GetCurSel())) { // uncompressed, mpeg and wm preview // create the following // // Decklink Video Capture - Smart-T - AVI Decompressor - Video Renderer // Decklink Audio Capture - Default Audio Renderer // // render the preview pin on the smart-T filter // first connect the Decklink video capture pin to the smart-T hr = CDSUtils ConnectFilters(m_pGraph, m_pVideoCapture, NULL, m_pSmartT, NULL); if (SUCCEEDED(hr)) { // now connect the preview pin of the smart-T to the video renderer hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Preview", m_pVideoRenderer, NULL); } } else { // DV Preview // create the following // // Decklink Video Capture - AVI Decompressor - Smart-T - Colour Space Converter - Video Renderer // Decklink Audio Capture - Default Audio Renderer // // this is a more efficient graph than created by the ICaptureGraphBuilder2 interface // add the AVI decompressor and colour space converter filters CComPtr IBaseFilter pAVIDecompressor = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AVIDec, L"AVI Decompressor", pAVIDecompressor); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pColourSpaceConverter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_Colour, L"Color Space Converter", pColourSpaceConverter); if (SUCCEEDED(hr)) { // conect the Decklink video capture pin to the AVI decompressor hr = CDSUtils ConnectFilters(m_pGraph, m_pVideoCapture, NULL, pAVIDecompressor, NULL); if (SUCCEEDED(hr)) { // connect AVI decompressor to the smart-T hr = CDSUtils ConnectFilters(m_pGraph, pAVIDecompressor, NULL, m_pSmartT, NULL); if (SUCCEEDED(hr)) { // connect the preview pin of the smart-T to the colour space converter hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Preview", pColourSpaceConverter, NULL); if (SUCCEEDED(hr)) { // connect the colour space converter to the video renderer hr = CDSUtils ConnectFilters(m_pGraph, pColourSpaceConverter, NULL, m_pVideoRenderer, NULL); } } } } } } } } else { hr = E_POINTER; } if (SUCCEEDED(hr)) { // the video path has been connected, initialise the preview window InitialiseVideoPreview(); // optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils RenderFilter(m_pGraph, m_pAudioCapture, L"Capture"); } // run the graph so that we can preview the input video if (m_pControl) { hr = m_pControl- Run(); } else { hr = E_POINTER; } } return hr; } //----------------------------------------------------------------------------- // CreateCaptureGraph // Create a graph to capture the input HRESULT CDecklinkCaptureDlg CreateCaptureGraph() { HRESULT hr = S_OK; // tack the file writer onto the preview graph if (m_pGraph m_pControl) { // stop the graph as we are about to modify it m_pControl- Stop(); // remove the default audio renderer so the Decklink audio capture filter // can be connected to the AVI mux, we will not preview audio whilst capturing CComPtr IPin pIPinOutput = NULL; hr = CDSUtils GetPin(m_pAudioCapture, L"Capture", pIPinOutput); if (SUCCEEDED(hr)) { // to disconnect both pins must be disconnected // find the pin connected to the Decklink audio capture pin CComPtr IPin pIPinConnection = NULL; hr = pIPinOutput- ConnectedTo( pIPinConnection); if (SUCCEEDED(hr)) { // disconnect the pins hr = m_pGraph- Disconnect(pIPinOutput); hr = m_pGraph- Disconnect(pIPinConnection); // get the owning filter of the downstream pin and remove it from the graph PIN_INFO pinInfo = {0}; hr = pIPinConnection- QueryPinInfo( pinInfo); if (SUCCEEDED(hr)) { if (pinInfo.pFilter) { hr = m_pGraph- RemoveFilter(pinInfo.pFilter); pinInfo.pFilter- Release(); } } } } // retrieve the capture filename m_captureFileCtrl.GetWindowText(m_captureFile); // store filename USES_CONVERSION; WCHAR captureFile[MAX_PATH]; wcsncpy(captureFile, A2W(m_captureFile), MAX_PATH); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetString("CaptureFile", reinterpret_cast const BYTE* (captureFile), sizeof(captureFile))); // decide the type of capture graph to build switch (m_compressionCtrl.GetItemData(m_compressionCtrl.GetCurSel())) { default case ENC_NONE hr = CreateUncompressedCaptureGraph(); break; case ENC_DV hr = CreateDVCaptureGraph(); break; case ENC_WM hr = CreateWMCaptureGraph(); break; } if (FAILED(hr)) { // there was a problem building the capture graph, issue a message // and rebuild preview graph char buffer[128]; StringCbPrintfA(buffer, sizeof(buffer), "The error 0x%08lx was detected when creating the capture graph with the following file name \r\n\r\n %s ", hr, m_captureFile); MessageBox(buffer, _T("Error"), MB_ICONERROR); OnBnClickedButtonStop();// destroy broken capture graph, build preview graph and enable controls } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // CreateUncompressedCaptureGraph // Create an optimum uncompressed capture graph HRESULT CDecklinkCaptureDlg CreateUncompressedCaptureGraph() { HRESULT hr = S_OK; // uncompressed capture // locate the AVI mux and file writer filters and add them to the graph CComPtr IBaseFilter pAVIMux = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AviDest , L"AVI Mux", pAVIMux); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pFileWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_FileWriter, L"File writer", pFileWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pFileWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pAVIMux, NULL); if (SUCCEEDED(hr)) { // connect the mux to the file writer hr = CDSUtils ConnectFilters(m_pGraph, pAVIMux, NULL, pFileWriter, NULL); if (SUCCEEDED(hr)) { // video path connected now optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, L"Capture", pAVIMux, NULL); } if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } } } } return hr; } //----------------------------------------------------------------------------- // CreateDVCaptureGraph // Create an optimum DV capture graph // NOTE that this will only work for SD HRESULT CDecklinkCaptureDlg CreateDVCaptureGraph() { HRESULT hr = S_OK; // locate the DV encoder, AVI mux and file writer filters and add them to the graph CComPtr IBaseFilter pDVEncoder = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_DVVideoEnc, L"DV Video Encoder", pDVEncoder); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pAVIMux = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_AviDest , L"AVI Mux", pAVIMux); if (SUCCEEDED(hr)) { CComPtr IBaseFilter pFileWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_FileWriter, L"File writer", pFileWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pFileWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { // configure the DV encoder CComQIPtr IDVEnc, IID_IDVEnc pIDV = pDVEncoder; if (pIDV) { // located a DV compression filter, set the format int videoFormat, dvFormat, resolution; hr = pIDV- get_IFormatResolution( videoFormat, dvFormat, resolution, FALSE, NULL); if (SUCCEEDED(hr)) { ASSERT(DVENCODERFORMAT_DVSD == dvFormat); ASSERT(DVENCODERRESOLUTION_720x480 == resolution); if ((DVENCODERVIDEOFORMAT_NTSC == videoFormat) (576 == m_vihDefault.bmiHeader.biHeight)) { // set the encoder to PAL if its NTSC videoFormat = DVENCODERVIDEOFORMAT_PAL; hr = pIDV- put_IFormatResolution(videoFormat, dvFormat, resolution, FALSE, NULL); } else if ((DVENCODERVIDEOFORMAT_PAL == videoFormat) (486 == m_vihDefault.bmiHeader.biHeight)) { // set the encoder to NTSC if its PAL videoFormat = DVENCODERVIDEOFORMAT_NTSC; hr = pIDV- put_IFormatResolution(videoFormat, dvFormat, resolution, FALSE, NULL); } } } if (SUCCEEDED(hr)) { // if the format is PAL, insert the Decklink field swap filter, PAL DV is the opposite // field order to PAL SD if (576 == m_vihDefault.bmiHeader.biHeight) { CComPtr IBaseFilter pPALFieldSwap = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_DecklinkFieldSwap, L"Decklink PAL Field Swap", pPALFieldSwap); if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the PAL field swap filter hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pPALFieldSwap, NULL); if (SUCCEEDED(hr)) { // connect the field swap filter to the DV encoder hr = CDSUtils ConnectFilters(m_pGraph, pPALFieldSwap, NULL, pDVEncoder, NULL); } } } else { // connect the smart-T capture pin to the DV Encoder hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, L"Capture", pDVEncoder, NULL); } if (SUCCEEDED(hr)) { // connect the DV encoder output to the AVI mux hr = CDSUtils ConnectFilters(m_pGraph, pDVEncoder, NULL, pAVIMux, NULL); if (SUCCEEDED(hr)) { // connect the mux to the file writer hr = CDSUtils ConnectFilters(m_pGraph, pAVIMux, NULL, pFileWriter, NULL); if (SUCCEEDED(hr)) { // video path connected now optionally connect the audio path if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the mux hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, L"Capture", pAVIMux, NULL); } if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } } } } } } } return hr; } //----------------------------------------------------------------------------- // CreateWMCaptureGraph // Create an optimum Windows Media capture graph HRESULT CDecklinkCaptureDlg CreateWMCaptureGraph() { HRESULT hr = S_OK; // locate the asf writer filter and add it to the graph CComPtr IBaseFilter pASFWriter = NULL; hr = CDSUtils AddFilter(m_pGraph, CLSID_WMAsfWriter, L"WM ASF Writer", pASFWriter); if (SUCCEEDED(hr)) { // set the output filename CComQIPtr IFileSinkFilter, IID_IFileSinkFilter pIFS = pASFWriter; if (pIFS) { USES_CONVERSION;// for T2W macro hr = pIFS- SetFileName(T2W(m_captureFile), NULL); if (SUCCEEDED(hr)) { hr = ConfigureWMEncoder(pASFWriter); } } if (SUCCEEDED(hr)) { if (FALSE == m_bAudioMute) { // connect the Decklink audio capture pin to the ASF writer hr = CDSUtils ConnectFilters(m_pGraph, m_pAudioCapture, pASFWriter, MEDIATYPE_Audio); } if (SUCCEEDED(hr)) { // connect the smart-T capture pin to the ASF writer hr = CDSUtils ConnectFilters(m_pGraph, m_pSmartT, pASFWriter, MEDIATYPE_Video); if (SUCCEEDED(hr)) { m_pControl- Run(); } } } } return hr; } //----------------------------------------------------------------------------- // ConfigureWMEncoder // Configure the Windows Media encoder HRESULT CDecklinkCaptureDlg ConfigureWMEncoder(IBaseFilter* pASFWriter) { HRESULT hr = S_OK; // modify the video output resolution of a system profile if (pASFWriter) { // simple system profile encoding CComQIPtr IConfigAsfWriter, IID_IConfigAsfWriter pICW = pASFWriter; if (pICW) { //NOTE You could just use the following for a default system profile //hr = pICW- ConfigureFilterUsingProfileGuid(WMProfile_XXX);// RE wmsysprf.h //NOTE If you want video only capture you must modify the profile to remove the audio // otherwise encoding will fail // Load a system profile and modify the resolution of the video output // NOTE The scope of the encoding is enormous, this just demonstrates how to change // the output video resolution from 320x240 to something larger. // Changing the resolution affects coding performance, it is likely that the encoder will // start to drop frames after a while. Using WM9 codecs will probably improve performance // and that has been left to the reader... ;o) // // get a profile manager CComPtr IWMProfileManager pIWMProfileManager = NULL; hr = WMCreateProfileManager( pIWMProfileManager); if (SUCCEEDED(hr)) { // load a system profile to modify CComPtr IWMProfile pIWMProfile = NULL; // NOTE Any WMProfile_XXX could be used here, or create a custom profile from scratch hr = pIWMProfileManager- LoadProfileByID(WMProfile_V80_FAIRVBRVideo, pIWMProfile); if (SUCCEEDED(hr)) { // search the streams for the video stream and attempt to modify the video size DWORD cbStreams = 0; hr = pIWMProfile- GetStreamCount( cbStreams); if (SUCCEEDED(hr)) { IWMStreamConfig* pIWMStreamConfig = NULL; GUID streamType = {0}; DWORD stream; if (m_bAudioMute) { // remove the audio stream for video only capture for (stream=0; stream cbStreams; ++stream) { hr = pIWMProfile- GetStream(stream, pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pIWMStreamConfig- GetStreamType( streamType); if (SUCCEEDED(hr)) { if (MEDIATYPE_Audio == streamType) { if (SUCCEEDED(pIWMProfile- RemoveStream(pIWMStreamConfig))) { --cbStreams; } SAFE_RELEASE(pIWMStreamConfig); break; } } } } } for (stream=0; stream cbStreams; ++stream) { hr = pIWMProfile- GetStream(stream, pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pIWMStreamConfig- GetStreamType( streamType); if (SUCCEEDED(hr) (MEDIATYPE_Video == streamType)) { // found the video stream CComQIPtr IWMMediaProps, IID_IWMMediaProps pIWMMediaProps = pIWMStreamConfig; if (pIWMMediaProps) { // get the size of the media type WM_MEDIA_TYPE* pMediaType = NULL; DWORD cbMediaType = 0; hr = pIWMMediaProps- GetMediaType(pMediaType, cbMediaType); if (SUCCEEDED(hr)) { pMediaType = (WM_MEDIA_TYPE*)new char [cbMediaType]; if (pMediaType) { hr = pIWMMediaProps- GetMediaType(pMediaType, cbMediaType); if (SUCCEEDED(hr)) { BITMAPINFOHEADER* pbmih = NULL; if (WMFORMAT_VideoInfo == pMediaType- formattype) { WMVIDEOINFOHEADER* pvih = (WMVIDEOINFOHEADER*)pMediaType- pbFormat; pbmih = pvih- bmiHeader; } else if (WMFORMAT_MPEG2Video == pMediaType- formattype) { WMVIDEOINFOHEADER2* pvih = (WMVIDEOINFOHEADER2*) ((WMMPEG2VIDEOINFO*)pMediaType- pbFormat)- hdr; pbmih = pvih- bmiHeader; } if (pbmih) { // modify the video dimensions, set the property, reconfigure the stream // and then configure the ASF writer with this modified profile pbmih- biWidth = 640;// was 320; pbmih- biHeight = 480;// was 240; pbmih- biSizeImage = pbmih- biWidth * pbmih- biHeight * pbmih- biBitCount / 8;// NOTE This calculation is not correct for all bit depths hr = pIWMMediaProps- SetMediaType(pMediaType); if (SUCCEEDED(hr)) { // config the ASF writer filter to use this modified system profile hr = pIWMProfile- ReconfigStream(pIWMStreamConfig); if (SUCCEEDED(hr)) { hr = pICW- ConfigureFilterUsingProfile(pIWMProfile); } } } } delete [] (char*)pMediaType; } } } } SAFE_RELEASE(pIWMStreamConfig); } } } } } /* // modify other ASF writer properties IServiceProvider* pProvider = NULL; hr = pASFWriter- QueryInterface(IID_IServiceProvider, reinterpret_cast void** ( pProvider)); if (SUCCEEDED(hr)) { IID_IWMWriterAdvanced2* pWMWA2 = NULL; hr = pProvider- QueryService(IID_IID_IWMWriterAdvanced2, IID_IID_IWMWriterAdvanced2, reinterpret_cast void** ( pWMWA2)); if (SUCCEEDED(hr)) { // set the deinterlace mode pWMWA2- GetInputSetting(...); SAFE_RELEASE(pWMWA2); } SAFE_RELEASE(pProvider); } */ } } else { hr = E_INVALIDARG; } return hr; } //----------------------------------------------------------------------------- // DestroyGraph // Remove all intermediate filters, keep any Decklink and video render filters as // these are used by all the graphs. HRESULT CDecklinkCaptureDlg DestroyGraph() { HRESULT hr = S_OK; if (m_pGraph m_pControl) { m_pControl- Stop(); // release our outstanding reference on this filter so it can be removed from the graph SAFE_RELEASE(m_pSmartT); // retrieve the name of the capture device, don t remove it in this method PWSTR pNameVideoCapture = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.GetCurSel()); PWSTR pNameAudioCapture = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.GetCurSel()); CComPtr IEnumFilters pEnum = NULL; hr = m_pGraph- EnumFilters( pEnum); if (SUCCEEDED(hr)) { IBaseFilter* pFilter = NULL; while (S_OK == pEnum- Next(1, pFilter, NULL)) { FILTER_INFO filterInfo = {0}; hr = pFilter- QueryFilterInfo( filterInfo); if (SUCCEEDED(hr)) { SAFE_RELEASE(filterInfo.pGraph); if ((NULL == wcsstr(filterInfo.achName, pNameVideoCapture)) (NULL == wcsstr(filterInfo.achName, pNameAudioCapture)) (NULL == wcsstr(filterInfo.achName, L"Video Renderer"))) { hr = m_pGraph- RemoveFilter(pFilter); if (SUCCEEDED(hr)) { hr = pEnum- Reset(); } } } SAFE_RELEASE(pFilter); } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // InitialiseVideoPreview // In short get the video screen renderer to draw into the picture control, which is our preview window // the following code sets this up, in addition to adding the HandleGraphEvent and WindowProc methods // read the DXSDK docos for more detailed information void CDecklinkCaptureDlg InitialiseVideoPreview(void) { // modify the preview window if (m_pVideoRenderer) { if (NULL == m_pIVW) { if (SUCCEEDED(m_pVideoRenderer- QueryInterface(IID_IVideoWindow, reinterpret_cast void** ( m_pIVW)))) { // get the window to handle redraws, etc // Set msg drain of VideoWindow to point to our dialog window. The dialog s // window procedure then handles events from the VideoWindow. HRESULT hr = m_pIVW- put_MessageDrain(reinterpret_cast OAHWND (m_hWnd)); if (NULL == m_pMediaEvent) { // Make graph send WM_GRAPHNOTIFY when it wants our attention see "Learning // When an Event Occurs" in the DX9 documentation. hr = m_pGraph- QueryInterface(IID_IMediaEventEx, reinterpret_cast void** ( m_pMediaEvent)); if (SUCCEEDED(hr)) { hr = m_pMediaEvent- SetNotifyWindow(reinterpret_cast OAHWND (m_hWnd), WM_GRAPHNOTIFY, 0); } // object created for it. RECT rc; m_preview.GetClientRect( rc); m_pIVW- SetWindowPosition(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top); // VideoWindow is a child window of the bounding rect hr = m_pIVW- put_WindowStyle(WS_CHILD); hr = m_pIVW- put_Owner(reinterpret_cast OAHWND (m_preview.GetSafeHwnd())); hr = m_pIVW- SetWindowForeground(-1); } } } } } //----------------------------------------------------------------------------- // PopulateDeviceControl // Fill device combo box with available devices of the specified category HRESULT CDecklinkCaptureDlg PopulateDeviceControl(const GUID* pCategory, CComboBox* pCtrl) { HRESULT hr = S_OK; if (pCategory pCtrl) { // first enumerate the system devices for the specifed class and filter name CComPtr ICreateDevEnum pSysDevEnum = NULL; hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, reinterpret_cast void** ( pSysDevEnum)); if (SUCCEEDED(hr)) { CComPtr IEnumMoniker pEnumCat = NULL; hr = pSysDevEnum- CreateClassEnumerator(*pCategory, pEnumCat, 0); if (S_OK == hr) { IMoniker* pMoniker = NULL; bool Loop = true; while ((S_OK == pEnumCat- Next(1, pMoniker, NULL)) Loop) { IPropertyBag* pPropBag = NULL; hr = pMoniker- BindToStorage(0, 0, IID_IPropertyBag, reinterpret_cast void** ( pPropBag)); if (SUCCEEDED(hr)) { VARIANT varName; VariantInit( varName); hr = pPropBag- Read(L"FriendlyName", varName, 0); if (SUCCEEDED(hr)) { size_t len = wcslen(varName.bstrVal) + 1; PWSTR pName = new WCHAR [len]; StringCchCopyW(pName, len, varName.bstrVal); CW2AEX buf(varName.bstrVal); pCtrl- SetItemData(pCtrl- AddString(buf), (DWORD)pName); } VariantClear( varName); // contained within a loop, decrement the reference count SAFE_RELEASE(pPropBag); } SAFE_RELEASE(pMoniker); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateVideoControl // Fill video format combo box with supported video formats using the IAMStreamConfig // interface. HRESULT CDecklinkCaptureDlg PopulateVideoControl() { HRESULT hr = S_OK; if (m_pVideoCapture) { // free mediatypes attached to format controls int count = m_videoFormatCtrl.GetCount(); if (count) { for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(item)); } m_videoFormatCtrl.ResetContent(); } // locate the video capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // loop through all the capabilities (video formats) and populate the control int count, size; hr = pISC- GetNumberOfCapabilities( count, size); if (SUCCEEDED(hr)) { if (sizeof(VIDEO_STREAM_CONFIG_CAPS) == size) { AM_MEDIA_TYPE* pmt = NULL; VIDEO_STREAM_CONFIG_CAPS vscc; VIDEOINFOHEADER* pvih = NULL; for (int index=0; index count; ++index) { hr = pISC- GetStreamCaps(index, pmt, reinterpret_cast BYTE* ( vscc)); if (SUCCEEDED(hr)) { char buffer[128]; WORD PixelFormat; float FrameRate; ZeroMemory(buffer, sizeof(buffer)); pvih = (VIDEOINFOHEADER*)pmt- pbFormat; char* pPixelFormatLUT[] = {"4 2 2", "4 4 4"}; if (pvih- bmiHeader.biBitCount == 16) PixelFormat = 8; else if (pvih- bmiHeader.biBitCount == 20) PixelFormat = 10; else PixelFormat = pvih- bmiHeader.biBitCount; // provide a useful description of the formats if (486 == pvih- bmiHeader.biHeight) { if (417083 == pvih- AvgTimePerFrame) { StringCbPrintfA(buffer, sizeof(buffer), "NTSC %d-bit %s (3 2 pulldown removal)", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "NTSC %d-bit %s", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if (576 == pvih- bmiHeader.biHeight) { StringCbPrintfA(buffer, sizeof(buffer), "PAL %d-bit %s", PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { char* pFrameRateFormat[] = {"%.2f", "%.0f"}; FrameRate = (float)(long)UNITS / pvih- AvgTimePerFrame; if ((720 == pvih- bmiHeader.biHeight) (59.94 FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.2fp %d-bit %s (Overcranked 60p)", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.0fp %d-bit %s (Overcranked 60p)", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if ((720 == pvih- bmiHeader.biHeight) (59.94 = FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.2fp %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD720 %.0fp %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else if ((1080 == pvih- bmiHeader.biHeight) (50.00 = FrameRate)) { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.2fi %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.0fi %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } else { if ((FrameRate - (int)FrameRate) 0.01) { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.2fPsF %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } else { StringCbPrintfA(buffer, sizeof(buffer), "HD1080 %.0fPsF %d-bit %s", FrameRate, PixelFormat, pPixelFormatLUT[(30 == PixelFormat)]); } } } // add the item description to combo box int n = m_videoFormatCtrl.AddString(buffer); // store media type pointer in item s data section m_videoFormatCtrl.SetItemData(n, (DWORD_PTR)pmt); // set default format if ((pvih- AvgTimePerFrame == m_vihDefault.AvgTimePerFrame) (pvih- bmiHeader.biWidth == m_vihDefault.bmiHeader.biWidth) (pvih- bmiHeader.biHeight == m_vihDefault.bmiHeader.biHeight) (pvih- bmiHeader.biBitCount == m_vihDefault.bmiHeader.biBitCount)) { m_videoFormatCtrl.SetCurSel(n); pISC- SetFormat(pmt); } } } } else { m_videoFormatCtrl.AddString("ERROR Unable to retrieve video formats"); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateAudioControl // Fill audio format combo box with supported audio formats using the IAMStreamConfig // interface. HRESULT CDecklinkCaptureDlg PopulateAudioControl() { HRESULT hr = S_OK; if (m_pAudioCapture) { // free mediatypes attached to format controls int count = m_audioFormatCtrl.GetCount(); if (count) { for (int item=0; item count; ++item) { DeleteMediaType((AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(item)); } m_audioFormatCtrl.ResetContent(); } // locate the audio capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // loop through all the capabilities (audio formats) and populate the control int count, size; hr = pISC- GetNumberOfCapabilities( count, size); if (SUCCEEDED(hr)) { if (sizeof(AUDIO_STREAM_CONFIG_CAPS) == size) { AM_MEDIA_TYPE* pmt = NULL; AUDIO_STREAM_CONFIG_CAPS ascc; WAVEFORMATEX* pwfex = NULL; for (int index=0; index count; ++index) { hr = pISC- GetStreamCaps(index, pmt, reinterpret_cast BYTE* ( ascc)); if (SUCCEEDED(hr)) { char buffer[32]; ZeroMemory(buffer, sizeof(buffer)); pwfex = (WAVEFORMATEX*)pmt- pbFormat; // provide a useful description of the formats if (1 == pwfex- nChannels) { StringCbPrintfA(buffer, sizeof(buffer), "%d channel, %2.1fkHz, %d-bit", (int)pwfex- nChannels, (float)pwfex- nSamplesPerSec / 1000, (int)pwfex- wBitsPerSample); } else { StringCbPrintfA(buffer, sizeof(buffer), "%d channels, %2.1fkHz, %d-bit", (int)pwfex- nChannels, (float)pwfex- nSamplesPerSec / 1000, (int)pwfex- wBitsPerSample); } // add the item description to combo box int n = m_audioFormatCtrl.AddString(buffer); // store media type pointer in item s data section m_audioFormatCtrl.SetItemData(n, (DWORD_PTR)pmt); // set default format if ((pwfex- wFormatTag == m_wfexDefault.wFormatTag) (pwfex- nChannels == m_wfexDefault.nChannels) (pwfex- nSamplesPerSec == m_wfexDefault.nSamplesPerSec) (pwfex- nAvgBytesPerSec == m_wfexDefault.nAvgBytesPerSec)) { m_audioFormatCtrl.SetCurSel(n); pISC- SetFormat(pmt); } } } } else { m_audioFormatCtrl.AddString("ERROR Unable to retrieve audio formats"); } } } } else { hr = E_POINTER; } return hr; } //----------------------------------------------------------------------------- // PopulateCompressionControl // Fill compression control with a selection of video compressors, locate the // encoders and add them to the combo box if they exist. HRESULT CDecklinkCaptureDlg PopulateCompressionControl() { int n = m_compressionCtrl.AddString("Uncompressed"); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_NONE); // search for the DV encoder, MPEG encoder and WM encoder IBaseFilter* pFilter = NULL; HRESULT hr = CoCreateInstance(CLSID_DVVideoEnc, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast void** ( pFilter)); if (SUCCEEDED(hr)) { n = m_compressionCtrl.SetCurSel(m_compressionCtrl.AddString("DV Video Encoder")); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_DV); SAFE_RELEASE(pFilter); } hr = CoCreateInstance(CLSID_WMAsfWriter, 0, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast void** ( pFilter)); if (SUCCEEDED(hr)) { n = m_compressionCtrl.SetCurSel(m_compressionCtrl.AddString("Windows Media Encoder")); m_compressionCtrl.SetItemData(n, (DWORD_PTR)ENC_WM); SAFE_RELEASE(pFilter); } m_compressionCtrl.SetCurSel(m_compressor); return S_OK; } //----------------------------------------------------------------------------- // OnCbnSelchangeComboVideodevice // Rebuild graph with selected capture device void CDecklinkCaptureDlg OnCbnSelchangeComboVideodevice() { SAFE_RELEASE(m_pVideoCapture);// release our outstanding reference // remove intermediate filters, since the device selection has changed the capture device will also be removed HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // rebuild graph with new capture device selection PWSTR pName = (PWSTR)m_videoDeviceCtrl.GetItemData(m_videoDeviceCtrl.GetCurSel()); if (pName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_VideoInputDeviceCategory, pName, m_pVideoCapture); if (SUCCEEDED(hr)) { // as the device has changed get the current operating format so that the control // and display this as the current selection CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // get the current format of the device to set the current selection of the control AM_MEDIA_TYPE* pamt = NULL; hr = pISC- GetFormat( pamt); if (SUCCEEDED(hr)) { if (pamt- pbFormat) { m_vihDefault = *(VIDEOINFOHEADER*)pamt- pbFormat; } DeleteMediaType(pamt); } } hr = PopulateVideoControl();// repopulate the control with formats from the new device if (SUCCEEDED(hr)) { hr = CreatePreviewGraph();// rebuild the graph with the new device } } } else { hr = E_POINTER; } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboAudiodevice // Rebuild graph with selected capture device void CDecklinkCaptureDlg OnCbnSelchangeComboAudiodevice() { SAFE_RELEASE(m_pAudioCapture);// release our outstanding reference // remove intermediate filters, since the device selection has changed the capture device will also be removed HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { PWSTR pName = (PWSTR)m_audioDeviceCtrl.GetItemData(m_audioDeviceCtrl.GetCurSel()); if (pName) { hr = CDSUtils AddFilter2(m_pGraph, CLSID_AudioInputDeviceCategory, pName, m_pAudioCapture); if (SUCCEEDED(hr)) { // as the device has changed get the current operating format so that the control // and display this as the current selection CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // get the current format of the device to set the current selection of the control AM_MEDIA_TYPE* pamt = NULL; hr = pISC- GetFormat( pamt); if (SUCCEEDED(hr)) { if (pamt- pbFormat) { m_wfexDefault = *(WAVEFORMATEX*)pamt- pbFormat; } DeleteMediaType(pamt); } } hr = PopulateAudioControl();// repopulate the control with formats from the new device if (SUCCEEDED(hr)) { hr = CreatePreviewGraph();// rebuild the graph with the new device } } } else { hr = E_POINTER; } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboVideoformats // Rebuild preview graph if format selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboVideoformats() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // locate the video capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pVideoCapture, MEDIATYPE_Video, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // set the new media format AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)m_videoFormatCtrl.GetItemData(m_videoFormatCtrl.GetCurSel()); m_vihDefault = *(VIDEOINFOHEADER*)pmt- pbFormat; ASSERT(sizeof(VIDEOINFOHEADER) = pmt- cbFormat); hr = pISC- SetFormat(pmt); if (SUCCEEDED(hr)) { // save the new format EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoFormat", reinterpret_cast const BYTE* ( m_vihDefault), sizeof(m_vihDefault))); // update compression control, we don t have an HD compression filter so disable compression for HD formats if (576 m_vihDefault.bmiHeader.biHeight) { m_compressor = 0; m_compressionCtrl.SetCurSel(m_compressor); // save the new state EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); m_bEnableCompressionCtrl = FALSE; } else { m_bEnableCompressionCtrl = TRUE; } EnableControls(); // rebuild the graph hr = CreatePreviewGraph(); } } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboAudioformats // Rebuild preview graph if format selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboAudioformats() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // locate the audio capture pin and QI for stream control CComPtr IAMStreamConfig pISC = NULL; hr = CDSUtils FindPinInterface(m_pAudioCapture, MEDIATYPE_Audio, PINDIR_OUTPUT, IID_IAMStreamConfig, reinterpret_cast void** ( pISC)); if (SUCCEEDED(hr)) { // set the new media format AM_MEDIA_TYPE* pmt = (AM_MEDIA_TYPE*)m_audioFormatCtrl.GetItemData(m_audioFormatCtrl.GetCurSel()); m_wfexDefault = *(WAVEFORMATEX*)pmt- pbFormat; ASSERT(sizeof(WAVEFORMATEX) == pmt- cbFormat); hr = pISC- SetFormat(pmt); if (SUCCEEDED(hr)) { // save the new format EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioFormat", reinterpret_cast const BYTE* ( m_wfexDefault), sizeof(m_wfexDefault))); // rebuild the graph hr = CreatePreviewGraph(); } } } } //----------------------------------------------------------------------------- // OnCbnSelchangeComboCompression // Rebuild preview graph if compression selection changed void CDecklinkCaptureDlg OnCbnSelchangeComboCompression() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // save the new state m_compressor = m_compressionCtrl.GetCurSel(); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); // rebuild the graph hr = CreatePreviewGraph(); } } //----------------------------------------------------------------------------- // OnBnClickedCheckAudiomute // Rebuild the capture graph to reflect the new audio setting void CDecklinkCaptureDlg OnBnClickedCheckAudiomute() { CButton* pCheck = (CButton*)GetDlgItem(IDC_CHECK_AUDIOMUTE); if (pCheck) { m_bAudioMute = pCheck- GetState() 0x0003; HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { // save the new state EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioMute", reinterpret_cast const BYTE* ( m_bAudioMute), sizeof(m_bAudioMute))); // rebuild the graph which reflects the new audio setting hr = CreatePreviewGraph(); } } } //----------------------------------------------------------------------------- // OnBnClickedButtonBrowse // Create a file open dialog to browse for a file location void CDecklinkCaptureDlg OnBnClickedButtonBrowse() { char BASED_CODE szFilters[] = "Windows Media Files|*.avi;*.asf;*.wmv|All Files (*.*)|*.*||"; char* pExt[] = {"*.avi", "*.avi", "*.asf;*.wmv"}; CFileDialog FileDlg(TRUE, "Windows Media Files", pExt[m_compressor], 0, szFilters, this); if (FileDlg.DoModal() == IDOK) { m_captureFile = FileDlg.GetPathName(); m_captureFileCtrl.SetWindowText(m_captureFile); } } //----------------------------------------------------------------------------- // OnBnClickedButtonCapture // Create a capture graph a start capture void CDecklinkCaptureDlg OnBnClickedButtonCapture() { HRESULT hr = CreateCaptureGraph(); if (SUCCEEDED(hr)) { if (m_pControl) { hr = m_pControl- Run(); if (SUCCEEDED(hr)) { DisableControls(); } } } } //----------------------------------------------------------------------------- // OnBnClickedButtonStop // Stop capture and revert to preview void CDecklinkCaptureDlg OnBnClickedButtonStop() { HRESULT hr = DestroyGraph(); if (SUCCEEDED(hr)) { hr = CreatePreviewGraph(); if (SUCCEEDED(hr)) { EnableControls(); } } } //----------------------------------------------------------------------------- // EnableControls // void CDecklinkCaptureDlg EnableControls(void) { CWnd* pWnd = GetDlgItem(IDC_COMBO_VIDEOFORMATS); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_COMBO_AUDIOFORMATS); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_CHECK_AUDIOMUTE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_COMBO_COMPRESSION); m_bEnableCompressionCtrl = (576 m_vihDefault.bmiHeader.biHeight) ? FALSE TRUE;// don t have an HDV codec do disable compression control for HD formats pWnd- EnableWindow(m_bEnableCompressionCtrl); pWnd = GetDlgItem(IDC_EDIT_CAPTUREFILE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_BROWSE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_CAPTURE); pWnd- EnableWindow(TRUE); pWnd = GetDlgItem(IDC_BUTTON_STOP); pWnd- EnableWindow(FALSE); } //----------------------------------------------------------------------------- // DisableControls // void CDecklinkCaptureDlg DisableControls(void) { CWnd* pWnd = GetDlgItem(IDC_COMBO_VIDEOFORMATS); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_COMBO_AUDIOFORMATS); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_CHECK_AUDIOMUTE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_COMBO_COMPRESSION); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_EDIT_CAPTUREFILE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_BROWSE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_CAPTURE); pWnd- EnableWindow(FALSE); pWnd = GetDlgItem(IDC_BUTTON_STOP); pWnd- EnableWindow(TRUE); } //----------------------------------------------------------------------------- // QueryRegistry // retrieve previous media formats from registry void CDecklinkCaptureDlg QueryRegistry(void) { if (ERROR_SUCCESS == m_regUtils.Open("DecklinkCaptureSample")) { EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("VideoFormat", reinterpret_cast LPBYTE ( m_vihDefault), sizeof(m_vihDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("AudioFormat", reinterpret_cast LPBYTE ( m_wfexDefault), sizeof(m_wfexDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("AudioMute", reinterpret_cast LPBYTE ( m_bAudioMute), sizeof(m_bAudioMute))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetBinary("VideoCompressor", reinterpret_cast LPBYTE ( m_compressor), sizeof(m_compressor))); WCHAR captureFile[MAX_PATH]; ZeroMemory(captureFile, sizeof(captureFile)); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.GetString("CaptureFile", reinterpret_cast LPBYTE (captureFile), sizeof(captureFile))); m_captureFile = captureFile; } else { // create the key and registry values if (ERROR_SUCCESS == m_regUtils.Create("DecklinkCaptureSample")) { EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoFormat", reinterpret_cast const BYTE* ( m_vihDefault), sizeof(m_vihDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioFormat", reinterpret_cast const BYTE* ( m_wfexDefault), sizeof(m_wfexDefault))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("AudioMute", reinterpret_cast const BYTE* ( m_bAudioMute), sizeof(m_bAudioMute))); EXECUTE_ASSERT(ERROR_SUCCESS == m_regUtils.SetBinary("VideoCompressor", reinterpret_cast const BYTE* ( m_compressor), sizeof(m_compressor))); } } // update mute audio check box control CButton* pButton = (CButton*)GetDlgItem(IDC_CHECK_AUDIOMUTE); pButton- SetCheck(m_bAudioMute); }
https://w.atwiki.jp/mainichi-matome/pages/374.html
The story below is originally published on Mainichi Daily News by Mainichi Shinbun (http //mdn.mainichi.jp). They admitted inventing its kinky features, or rather deliberately mistranslating them from the original gossip magazine. In fact, this is far from the general Japanese' behavior or sense of worth. このページは、毎日新聞事件の検証のための配信記事対訳ページです。直接ジャンプして来られた方は、必ずFAQをお読みください。 ※ この和訳はあくまでもボランティアの方々による一例であり、翻訳の正確さについては各自判断してください。もし誤訳(の疑い)を発見した場合には、直接ページを編集して訂正するか翻訳者連絡掲示板に報告してください。 Loose laws leave adoption trade vulnerable to sexual predators緩い法律は養子縁組取り引きを性的捕食者の餌食にする。 拡散状況 関連ページ Loose laws leave adoption trade vulnerable to sexual predators 緩い法律は養子縁組取り引きを性的捕食者の餌食にする。 元記事(削除済み):http //mdn.mainichi-msn.co.jp/waiwai/news/20061030p2g00m0dm012000c.html (2006年10月30日配信) Unwanted Japanese babies are being sold for huge prices to rich foreigners and, thanks to a lack of laws, possibly even pedophiles, according to Josei Jishin (11/7-14). 望まれない日本人の赤ん坊は高額で海外の金持ちや、法律の不備のせいで小児性愛者にまで売られている。(女性自身、11月7・14日合併号より) "Among the women coming to my clinic are schoolgirls who've fallen pregnant to college student boyfriends or others having affairs with married men. Just recently, we got a part-time worker knocked up by some bigwig bureaucrat. She told us she wanted to leave a baby with us that she hadn't been able to abort. We were more than happy to take it off her hands," a gynecologist who moonlights as a trader in unwanted babies tells Josei Jishin. 「私の診療所に来る女性には、大学生のボーイフレンドとの間に子供ができた女子生徒や、結婚している男性との不倫関係で妊娠した女性たちです。 ちょうど最近、私たちはある大物官僚に妊娠させられたパートで働く女性に会いました。彼女は私達に中絶ができなかったから、赤ん坊を私たちに残したいと言ったのです。 私達は喜んで彼女から赤ん坊を受けとりました」トレーダーの裏の顔を持つ産婦人科医は女性自身に語った。 Trade in Japanese babies can be lucrative, which has attracted the criminal element to the process. 日本では赤ん坊売買は犯罪的要素があるものの金になる。 "There are actually companies out there that are like slave traders, selling babies overseas for huge sums," Masaki Takakura, author of "Akachan no Nedan (The Price of a Baby)," tells Josei Jishin. 「実際、あちこちに赤ん坊を海外に高値で売る奴隷商人のような法人がある」「赤ちゃんの値段(The Price of a Baby)」の著者、高倉 正樹は女性自身に語る。 Takakura says there are eight companies registered with the Ministry of Health, Labor and Welfare and another 20 which haven't been authorized by the government. Of the 20 unauthorized places, 12 were still actively operating as of September 2004. The official companies sent 106 Japanese babies to be adopted overseas in the period from 2000 to 2003, but there's no way to find out how many young children the unlicensed places shipped off. That also stops authorities from finding out exactly how many Japanese babies are being sent overseas for adoption. 高倉は語る。厚生労働省に登録された8つの法人があり、政府非公認の20の法人がある。未許可の20のうち、2004年9月に12の団体がまだ活動していた。 公式な法人は2000年から2003年の間に106人の日本人の赤ん坊を海外に養子に出した。しかし、非公認団体が幼い子供を何人海外に送り出したのか知る術はない。 また、いったい何人の日本人の赤ん坊が養子縁組のため海外に売り飛ばされたのか、当局が知るのを彼らは防いでいる、と。 "You can't be punished for sending a baby out of Japan to be adopted without reporting it to the authorities, and there's no clear laws that allow for people who do this to be arrested," Takakura says. 「当局への報告なしに赤ん坊を日本から養子として送り出しても、逮捕されないでしょうね。こういったことをした人々を逮捕するために明確な法律がないんです」と、 高倉。 In countries like the United States, families looking to adopt foreign children have to undergo strict inspections before their applications are approved and they're put on a list to get the next available kid. But there's no such obligation in Japan and it's up to the organization providing the baby to decide whether it will hand it over to an applicant. アメリカ合衆国のような国では、海外の子供を養子にしようとしている家族は、申請が受理される前に厳格な検査を受け、次に養子にできる子供を得るためのリストに載る。 しかし、日本にはそのような義務はない。申込者の手に赤ん坊が渡るかどうか決めるのは、赤ん坊を預かっている機関次第だ。 "I'm speaking in extremes here, but the reality is that under the existing circumstances, it's perfectly possible for immoral types to buy children to use in things like child pornography or to harvest their organs," Takakura says. 「大変困ったことに、現在の状況下ではそういう現実なんです。たとえばキッズポルノや子供の内臓を摘出する為に、不道徳な人々が子供を買うことは完全に可能です」と、高倉は言う。 Takakura adds that Japanese babies are popular choices for adoption by couples overseas. 高倉は日本人の赤ん坊は海外のカップルが養子として選ぶのに人気があると付け加えた。 "Drugs are rife in America, and a lot of children born with disabilities are put up for adoption. But Japanese babies are healthy, which makes them a popular choice overseas," Takakura says. 「アメリカではドラッグがはびこっています。そして、障害を持って生まれた多くの子供が養子に出されます。しかし、日本人の赤ん坊は健康です。 それが海外で人気である理由です」と、高倉は語る。 Couples looking to adopt usually want babies as young as possible and there are no laws in Japan to protect children from being sent out at a particular age, which means kids as young as 6-months-old are being shipped off to other lands. 養子縁組をしようとするカップルは通常できるだけ幼い赤ん坊をほしがる。年齢で区切って子供が発送されるのを防ぐ法律は日本にはない。 つまりこれは、生後6ヶ月の幼い子供が、他国に引き渡されることを意味する。 "There are some companies demanding payments of up to 5 million yen for providing a Japanese baby for adoption," Takakura says. "And they're callous enough to say things like they can make the price cheaper if the couple will accept a kid with disabilities." 「幾つかの法人は、養子として日本人の赤ん坊を提供するために、最大で50万円を請求します」と高倉。 「そして、もしもカップルが障害のある子供を受け入れるなら、安くしてもいいなんてことを言うくらいに、彼らは冷淡です」 International Social Service Japan is a foundation whose tasks include finding adoptive parents for unwanted children. 日本国際社会事業団(International Social Service Japan)は行き場のない子供たちのために養父母を探すことを課題に含む財団法人だ。 "For cost-cutting reasons, we have to put children waiting for adoption into homes so they're adoptive parents don't have to foot a big bill for their care. But before turning our attention overseas, we try to find parents looking to adopt within Japan," ISSJ's Ikuko Omori tells Josei Jishin. Omori says ISSJ is not opposed to sending children outside of Japan and argues it's better in cases where the kids are disabled or of a different skin color and less likely to undergo the type of discrimination common in the land of their birth. 「コスト削減のために、私達は子供達を養子縁組して家庭に入るのを待っている状態に置かなければなりません。 だから、養父母は子供達の養育にかかった多額の金銭を支払わなくていいのです。しかし、海外に目を向ける前に、私たちは国内で養子縁組をしようとする両親を探そうとします」日本国際社会事業団(ISSJ)のオオモリイクコは女性自身に語った。オオモリは、ISSJは子供を国外に送ることに反対しないし、子供が障害児である場合や肌の色が違う場合、彼らが生まれた土地にある人種差別に耐えられそうにない場合は比較的良いのではないかと主張すると言う。 "But for children who we can't find parents for in Japan, we've got to take the overseas route," Omori says, adding that ISSJ inspects prospective parents before any children are passed to their parents. "But once they have been handed over, that's basically it. Not all adoptive parents are good. And we can't help but suspect nefarious sexual plans among those who apply to receive girls aged 7 or 8. But I don't know whether even these same standards are being applied by individual gynecologists who are sending children for adoption overseas." 「私達が日本で養親を見つけることができなかった子供達のためには、私達は海外のルートを選んできました」オオモリは言う。 加えて、ISSJは子供を渡す前に見込みのある両親を調査する。「ただし彼らが委ねられるときに一度だけ、大体そんな感じです。 養親全員が善人ではありません。私達は助けることはできませんが、7、8才の少女を引き取りにくる人々の間にある極悪な性的な狙いを疑うことはできます。 しかし、同様の基準が一部の産婦人科医によって海外の養子縁組に送りだされた子供たちに適用されるのかどうかは知りません」 The moonlighting gynecologist says his organization has "absolutely no checks" when sending children to be adopted overseas. 裏の顔を持つ産婦人科医は、養子縁組の為に子供を海外に送る際、彼の組織は”なんのチェックもしない”と言う。 "We hold off if the applicant looks a bit shady. But you don't inspect parents before they have kids, do you? If there's any sort of problem, we'll be able to deal with it through some sort of legal authority," the baby trader tells Josei Jishin. "But, we're a gynecological clinic. Our job is to deliver children. And then hand them over in the order they're applied for. If we make some mistake, we'll regret it and give up the business. But, up till now, we've never had a problem." (By Ryann Connell) 「私達は応募者が少しでもいかがわしいようなら阻止します。ですが、貴方だって、他人が子供を持つからって、その前にその親たちを(訳補:親として相応しいか) 検査したりしないでしょう? もし何かの問題が起こったら、私達は幾つかの法機関を通して対応するつもりです」赤ん坊のトレーダーは女性自身に伝える。 「しかし、私達は産婦人科医です。私の仕事は赤ん坊を送り届けることです。だから、彼ら(訳註:子供・赤ん坊)が申し込まれた順に手渡してゆきます。 もしも間違いが何か起こったら、私達は悔やみ、この事業を諦めるでしょう。ですが、今のところ何の問題も起こっていません」(ライアン・コネル) 拡散状況 CRNジャパン(日本の子供の人権ネットワーク) http //www.crnjapan.com/articles/2006/en/20061030-adoption_laws.html 英語サイト 部分転載:http //fatso.newsvine.com/_news/2006/10/30/419885-loose-laws-in-japan-leave-adoption-trade-vulnerable-to-sexual-predators 部分転載:http //www.warrenellis.com/?p=3228 関連ページ CRNジャパン(日本の子供の人権ネットワーク) WaiWaiの記事を転載した英語サイト:N シーファーが日本を児童ポルノ大国呼ばわりした原因 元記事一覧 厚生労働省 問合せ先一覧 毎日新聞英語版から配信された記事2006年
https://w.atwiki.jp/legendofnorrath/pages/62.html
Update Notes September 21st 2007 ************************************* - Changed the name of the first lobby to Training Grounds . - Changed the color of emotes. - Warning confirmation when you are about to post a trade in which you are giving away cards for nothing in return. - In Trades you now see information about your cards when viewing their collection. - Fixed crash in posted trades when a player examines a posted trade that is cancelled or accepted at the same time. - Symbol of Cazic Thule will no longer get stuck if you have no cards in your discard pile. - Fix for a crash in the Deck Builder Wizard. - Deck Builder Wizard will not allow you to create an avatar without a valid archetype. - Deck validator will not allow an invalid archetype avatar. - When trading, only the cards that players own (not the full set) display in their collections. - Quick Join now correctly creates timed games. - Changed the text of the You are not allowed to trade error to be more informative. - Removed preference option for tooltips on large cards since this in obsolete. - Posted trades progress bar now closes when the Posted Trade window is closed. - Fix for border around zoomed card images. - Fix for being able to observe a password protected match with an invalid password. - Resurrection will now punish you for resurrecting units of the other alignment. - Gnome clever special power will now prevent combat after completing Retrieve the Stolen Coinpurse. - You can no longer play Pummel on Truth Captain and then discard the same Pummel.
https://w.atwiki.jp/mainichi-matome/pages/4224.html
The story below is originally published on Mainichi Daily News by Mainichi Shinbun (http //mdn.mainichi.jp). They admitted inventing its kinky features, or rather deliberately mistranslating them from the original gossip magazine. In fact, this is far from the general Japanese' behavior or sense of worth. このページは、毎日新聞事件の検証のための配信記事対訳ページです。直接ジャンプして来られた方は、必ずFAQをお読みください。 ※ この和訳はあくまでもボランティアの方々による一例であり、翻訳の正確さについては各自判断してください。もし誤訳(の疑い)を発見した場合には、直接ページを編集して訂正するか翻訳者連絡掲示板に報告してください。 Geeks can't get enough of genitalia picture book for doctorsオタクは医師向けの生殖器絵本では満足しない 拡散状況 関連ページ Geeks can't get enough of genitalia picture book for doctors オタクは医師向けの生殖器絵本では満足しない 0 Geeks can't get enough of genitalia picture book for doctors 2006,11,30 オタクは医師向けの生殖器絵本では満足しない Shukan Post 12/8 By Ryann Connell 週刊ポスト 12/8 ライアン・コネル記 1 Akihabara has gone from iPods to pudenda, according to Shukan Post (12/8). 秋葉原はiPodから外性器へと向かう。週刊ポスト(12/8)より。 2 Where the Tokyo district was once best known for its plethora of electronics shops, recent years have seen the otaku swarm into Akihabara and make it their virtual capital. 東京のその一帯は、かつてはその過剰な電気店によって最も知られていたが、近年、オタクが秋葉原へと群がるようになり、秋葉原は事実上オタクの首都となった。 3 Now, they've created a huge hit out of "Joseiki to Itami (Vaginas and Pain)," a medical textbook that features a huge hand-drawn painting of female genitalia on its cover. そして今、彼らは、表紙に女性器の大きな手書きの絵が描かれている医学教科書・「ジョセイキ ト イタミ(ヴァギナと痛み)」を大ヒット作にした。 4 "We started selling it in September and news spread over the web, which sent sales skyrocketing. Salarymen in their 20s and 30s are buying most of the copies. But I still have absolutely no idea why it's selling so well," Junpei Kawasaki, operator of Akihabara store Sangatsu Usagi, tells Shukan Post. 「私たちは九月にこの本を売り始め、ニュースはウェブ上を広がり、そのおかげで売り上げは飛躍的に増大しました。 二十代や三十代のサラリーマンが、この本のほとんどを買っています。 しかし今でも私は、なぜこの本がこんなにたくさん売れたのか、まったく見当がつきません」と、秋葉原にある店『三月兎』の経営者・川崎順平は、週刊ポストに語る。 5 "Joseki to Itami" is only 12 pages long and sells for a whopping 1,800 yen. Sangatsu Usagi is deeply involved in the otaku culture, filling its shelves with computer parts, the fan manga known as dojinshi, dress-ups for cosplayers and all sorts of other otaku paraphernalia, including the genitalia picture book, which is widely referred to among the geeks as "the vagina book." 「ジョセキ ト イタミ」はわずか12ページの長さで、べらぼうに高い千八百円で売られている。 三月兎はオタク文化に深く関わっており、店の棚いっぱいに並べられているのはコンピュータのパーツ、ドウジンシとして知られるファンによるマンガ、コスプレイヤー用の衣装、そしてあらゆる種類のオタクグッズであり、その中には、「女性器本」としてオタクの間で広く言及されている、前述の女性器絵本も含まれている。 6 Those looking for a turn-on from the bestseller are almost bound to be disappointed. It devotes much of the little space it has to such issues as endometriosis and pre-menstrual syndrome. And, living up to its name as "the vagina book," "Joseiki to Itami" also includes charts of a woman's nether regions. このベストセラーのムラムラさせる外観には、大抵、失望させられることになる。 この本は、その少ない紙面のほとんどを、子宮内膜症や月経前症候群といった問題に捧げている。 そして、「女性器本」という名前に相応しく、「ジョセイキ ト イタミ」にはまた、女性の陰唇部の図解が載っている。 7 A spokesman from the book's distributor, Apply Corp., laughs when asked about the commercial success of "Joseiki to Itami." この本の販売業者・アプライ社の広報担当は、「ジョセイキ ト イタミ」の商業的成功について尋ねられると、笑う。 8 "'Joseiki to Itami' was originally part of a series of medical textbooks produced in picture book format by an American publisher. The Japanese translation first came out in January 2004," the spokeswoman tells Shukan Post. "It's supposed to be a book for doctors, so when Sangatu Usagi placed an order with us, we all thought it was a bit weird the book was selling in Akihabara. But then, thanks to Sangatsu Usagi, 'Joseiki to Itami' has become by far the best-selling book in the series. As to why it's selling so well, though, we wouldn't have a clue." 「『ジョセイキ ト イタミ』はもともと、アメリカの出版社によって絵本の形式で作られた、医療教科書シリーズの一部です。 日本語への翻訳がはじめて販売されたのは2004年の1月です」と、この広報担当は週刊ポストに語る。 「これは医師向けの本なので、三月兎さんが私たちに発注したときは、私たちは全員、この本が秋葉原で売れているというのはちょっと奇妙だと思いました。 とはいえ、三月兎さんのおかげで、「ジョセイキ ト イタミ」は今までのところ、シリーズ中で最も売れた本になりました。 とはいえ、なぜこの本がこんなにたくさん売れるかについては、私たちには見当もつきません」 9 Some of those buying the book have a clearer idea of its appeal. この本を買った人の中には、この本の魅力についてより明らかな見解を持ったものもいる。 10 "It's sort of like a book filled with grotesque art," a 30-something salaryman says. "This is the sort of book I can put up on my shelves and the cover almost looks like a painting." 「これは、グロテスクなアートでいっぱいの本みたいなものです」と、三十数歳のサラリーマンは言う。 「これは、自分の本棚においておける種類の本で、表紙は一種の絵画に見えます」 11 Even though it seems the book has nothing to do with sating sexual desires, a salaryman in his 20s says there is something of an association. この本には性的欲求を満たすところは何も無いように見えるにも関わらず、二十代のサラリーマンは、いくぶん関連があるという。 12 "I thought I'd buy it to give me some help seducing any women I could bring back to my home," the salaryman tells Shukan Post. "If it's a medical textbook, it's gonna seem more like a gag than anything dirty." (By Ryann Connell) 「私の家に女性を連れてきたときに、女性を誘惑する助けになるだろうから買いたい、と思いました」と、このサラリーマンは週刊ポストに語る。 「医療教科書ならば、どんないやらしいものより、これは冗談(あるいは 猿ぐつわ)のように見えるでしょう」(ライアン・コネル記) 13 November 30, 2006 2006年11月30日 拡散状況 Barely 18 Movies http //www.barely18movies.com/blog/?p=440 英語サイト https //secure.adrentech.com/AFRX/doc.aspx?docID=5000096 http //yanai.blackmage.org/sky2/?p=2014 関連ページ Barely 18 Movies WaiWaiの記事を転載した英語サイト:A WaiWaiの記事を転載した英語サイト:S 毎日新聞英語版から配信された記事2006年
https://w.atwiki.jp/cadencii_en/pages/41.html
English 日本語 Release Note Release Date 15 Aug, 2009 Notes Cadencii requires ".NET Framework Runtime(version 2.0 or later)". Installer of this rumtime is available from the link below. .NET Framework Runtime Download .NET Framework 3.5 SP1 Cadencii can be launched with the latest version of mono. This enable you to use Cadencii with many platforms supported by mono. (Note Several functions using VOCALOID2 VSTi are not available in this case.) Mono is available from the link mono download Download Cadencii version 2.3.2 (639KB) How to get source codes Source code is available on SourceForege.JP. Please follow the instruction below for checking out the SourceForge.JP s SVN repository. svn checkout -r 416 http //svn.sourceforge.jp/svnroot/cadencii/branches/2.3 ./ These svn command is for checiking out "THIS" version of Cadencii. In order to get the latest source codes, please remove "-r" option.
https://w.atwiki.jp/brunosbvcq/pages/20.html
Aside from sporting Singapore rugby balls tops that seem like the union teams that they support, many rugby fans do weird things to express themselves. But, often supporters do ridiculous things that appear unreasonable or downright silly, particularly in the eyes of non-sport fans. Below are a few of the ways that rugby enthusiasts are eager to do simply to show their commitment and undying loyalty to their much loved Rugby Union teams. Seeing rugby jerseys in the wardrobe of the sports enthusiast is nothing new. In fact, lots of people buy jersey reproductions of their favorite teams so they can wear it in a club or on the ground while watching a match. But, some supporters go to the level of filling their domiciles with souvenir items and paraphernalia of their Rugby Union team. Some even get bed-sheets, towels, pillowcases, clocks, cards, boxer shorts, pens and even carpets adorned using their favorite Rugby Union team logo. There is really nothing wrong to find the place of an extreme rugby lover below the age of 18 is filled up with memorabilia and other items of his favorite team. However for an individual who is 40 years of age and above, having a roomful of his beloved team s souvenirs (including covers, bed-sheets, and whoopee cushion) can be quite scary. Sports enthusiasts, including Singapore rugby boots fans, really know how to enjoy themselves. Aside from painting their faces with the colors of their much adored teams, you will also see them waving flags and sporting rugby shirts. But often, there are rugby fans that are willing to fight with other fans supporting their rival teams, particularly after a match. Getting a tattoo honoring your chosen rugby team is acceptable, but fighting with somebody who is a supporter of a team can be considered a bit too much. Several rugby enthusiasts party after the success of their favorite team. You may probably experience wild parties in most sports bar inside your area after a big rugby game. But, recently, a lover of Wales Rugby team has done something crazy to commemorate the victory of his favorite team. Well, he chose to mutilate himself as a display of support. As yet, that fan cannot really explain why he did something so outrageous. This is not something which you should follow, if you are a rugby fan. Instead, it could be better if you just adhere to getting and wearing rugby shirts as a symbol of support.
https://w.atwiki.jp/djmax2/pages/24.html
◆未公開のムービー等が鑑賞できます。一定条件を満たす毎に追加されていきます。全6種類 DJMAX PORTABLE 2 ~Opening Movie~ OUTLAW SYRIANA CHRONICLE ~Director's EDITION~ GET ON TOP ~No Cut Version~ NB RANGER:Returns ~Dance EDITION~ SOUND STORM ~PENTAVISION Sound Team VJ Edition~ DJMAX PORTABLE 2 ~CREDITS~
https://w.atwiki.jp/connor/pages/11.html
The single moms are a group of mature women who are not in a relationship and have children. They are also popularly known as “MILFs”. These women usually date younger men and the term MILF is used to describe them. The Online Dating Dilemma of the Millenial Male Millennials are the first generation to grow up in a world where online dating is the norm. They have grown up with smartphones and social media and as such, they have different needs and expectations when it comes to dating. Millennial males are not only more selective about who they date, but also how they date. They want something more than just a hookup or a fling, but that doesn t mean that they don t want to get laid with experienced partners like MILFs. Dating platform presented here has made it easier for these men to find casual sex partners. Online Dating Tips for Millenials Online dating is a great way of meeting people. It can be a little bit daunting at first, but there are some tips that might make it easier. The first thing to do is to figure out what you re looking for in a partner. Are you looking for someone with a certain religion? Do you want someone who has the same interests as you? Want to date an older woman or even MILF? If you re not sure, then think about what really matters to you in your relationships and write them down. This will help narrow down your search when browsing online profiles. The next thing to do is to put yourself out there! There are plenty of people out there looking for the same things as you, so don t be afraid to share your profile and start conversations with other singles online! Online Dating Tips for MILFs Women are an important part of the online dating market. In fact, they make up a large number of users on most dating sites. So it’s not surprising that many dating apps and sites have become more female-friendly in recent years. As a woman, you may find yourself feeling overwhelmed and intimidated by the sheer number of men who are looking for a date. MILFs are often seen as desirable partners on dating sites. There are some online dating tips for single mothers that can help them to get more attention and better results on dating sites. Here’s what you should do. Make sure that your profile has information about your kids and how they fit into your life. This will show that you are a self-confident person who isn’t going to hide any important facts about yourself. The Potential Advantages of Online Dating as a Single Mom or MILF Online dating is a great way for single moms and milfs to find love. It s also a great way for them to find new friends or just have some fun. Online dating has given women the opportunity to get out there and be themselves, which can be difficult in the real world. Dating online also lets them take their time before they meet someone in person. The potential advantages of online dating are that it can help single moms or milfs feel more comfortable about themselves, it can help them meet new people, and it gives them the opportunity to be themselves without judgement from others.
https://w.atwiki.jp/vocaloidenglishlyric/pages/1200.html
【Tags Len Orebanana-P Oshiire-P tP G】 Original Music title ガラクタ・パレード English music title Parade of the Scrap Romaji music title Garakuta Pareedo Music Lyrics written by Neru / 押入れP (Oshiire-P) Music arranged by Neru / 押入れP (Oshiire-P) Voice edited by おればななP (Orebanana-P) Singer(s) 鏡音レン (Kagamine Len) Click here for the original Japanese Lyrics English Lyrics (translated by animeyay): Crouching within the rubble, we opened our eyes, hanging on with our arms to our soaked dreams, which we were unable to abandon completely. On the mountains of rubble, we, with our hands at our chests, made a vow we must properly convey the words of farewell to our past selves. We howl like battered dogs, march like abandoned cats, and carry flags full of patches. Now, shall we begin? We haven t arrived because we are discarded scrap, yet we are self-contradictory. Hurry, before we are burned away in this world filled with paper scrap. We are discarded scrap who are unfinished, yet we get up every time after we fall. Now spill from your guts all the thoughts you have held in inside the garbage can. Hanging on with our arms both our broken dreams and decayed dreams, we must properly convey the truth to you from the past. Just how long do you plan to keep deceiving your delicate self who s weakly crying in the mirror? please Open your eyes. We haven t arrived because we are discarded scrap, yet we are self-contradictory. Hurry, before we are flushed and sunk into the garbage sea. We are discarded scrap who are unfinished, yet we get up every time after we fall. Now spill from your guts all the thoughts you have held in inside the garbage can. We haven t arrived because we are discarded scrap, yet we are self-contradictory. The endless voice of our life has erased everything, even others sneers. We are discarded scrap, but still we will reach our hands towards tomorrow even if it s in vain. Now once we have spilled from our guts all the thoughts we have held in inside the garbage can, will we be able to smile? Romaji lyrics (transliterated by animeyay): gareki no naka de uzukumaru you ni bokura mezameta sutekirenakute zubunure no yume ude ni kakaete gareki no yama de mune ni te o ate bokura chikatta ano hi no boku ni wakare no kotoba chanto tsugenakya makeinu no tooboe no you na suteneko no maachi no you na tsugihagi moyou no hata kakage saa, hajimeyou ka garakuta, yue ni mitoutatsu garakuta, saredo niritsu-haihan kamikuzu darake no sekai de moyasarete shimau mae ni garakuta, tsumari mikansei garakuta, keredo shichiten-hakki gomibako no naka no omoi o ima buchimakete yo yabuketa yume mo kusatta yume mo ude ni kakaete ano hi no kimi ni hontou no koto chanto tsugenakya kagami no naka de naite iru kiesou na yowai jibun o itsu made sonna ni damasu n da me o akete o-kure garakuta, yue ni mitoutatsu garakuta, saredo niritsu-haihan haikibutsu mamire no umi de nagasarete shizumu mae ni garakuta, tsumari mikansei garakuta, keredo shichiten-hakki gomibako no naka no omoi o ima buchimakete yo garakuta, yue ni mitoutatsu garakuta, saredo niritsu-haihan azawarau koe sae kakikeshita nariyamanu inochi no koe garakuta, sore de mo bokura wa todokanakutomo ashita e to te o nobasu gomibako no naka no omoi o ima buchimaketara konna bokura de mo itsuka waraemasu ka. [Neru, OshiireP, Oshiire-P, Orebanana-P, OrebananaP]